package scala.day03

object Demo08Implicit {
  def main(args: Array[String]): Unit = {
    /**
      * 显式类型转换
      */
    val s: String = "1000"
    //显式转换
    val int: Int = s.toInt

    /**
      * 隐式转换
      * 1.隐式转换方法
      * 2.隐式转换变量
      * 3.隐式转化类
      */
    def print(i:String):Unit = {
      println(i)
    }
    print("1000")
    print(100.toString)

    /**
      * 隐式转化方法
      * 和方法名无关，和参数类型返回值类型有关
      * 可以隐式的将参数类型转化为返回值类型
      *
      * 在一个作用域中只能有一个参数类型和返回值类型一样的转化方法
      */
    implicit def intToString(i:Int):String = {
      println("隐式转换方法被调用")
      i.toString
    }
    implicit def doubleToString(i:Double):String = {
      println("隐式转换方法被调用")
      i.toString
    }
    print(1000)
    print(100.0)
    //在这作用域中int类型可以当成String类型来使用
  }
}
